/*
 * @Author: sunkai@xinxinapp.cn
 * @Date: 2020-12-28 16:19:44
 * @LastEditTime: 2020-12-28 16:27:07
 * @LastEditors: sunkai@xinxinapp.cn
 * @Description: 
 * @FilePath: /vue-cli-demo/js/watcher.js
 */
class Watcher {
  constructor (vm, key, cb) {
    this.vm = vm
    this.key = key
    this.cb = cb

    // 把watcher对象记录到Dep类的静态属性中
    Dep.target = this

    // 触发get方法，在get方法中会调用addSub
    this.oldValue = vm[key]
    // 重置，防止重复添加
    Dep.target = null
  }

  // 当数据发生变化时，更新视图
  update () {
    let newValue = this.vm[this.key]
    if (this.oldValue === newValue) return
    this.cb(newValue)
  }
}